package fr.upmc.alasca.centreCalcul.interne.machinePhysique.interfaces;


/**
 * @author Antoine Lavaire, Sabri Labassi, Thibaut Fleury, Ryme Fantazi
 */
public interface 	MachinePhysiqueApplicationI 
extends 			MachinePhysiqueAdmissionI
{
	/**
	 * Permet d'allouer des coeurs réservés à une application.
	 * @param p_uriApplication L'identifiant de l'application faisant la demande
	 */
	public void		allouerCoeurs
	(
		String  p_uriApplication
	) throws 	Exception;
	
	/**
	 * Permet à un répartiteur de requête d'une application de récupérer la 
	 * machine virtuelle qui lui a été réservé sur une machine physique.
	 * @param uriApplication L'identifiant de l'application faisant la demande
	 * @return null si aucun coeur n'était réservé pour cette application,
	 * et retourne l'URI de la MV si des coeurs ont pu y être attachés
	 */
	public	String	recupererMV
	(
			String	uriApplication
	) throws	Exception;
	
	
	/**
	 * Eteint complètement l'application. Les coeurs sont désalloués et la MV
	 * est détruite.
	 * @param uriApplication
	 * @throws Exception
	 */
	public	void	shutdownApplication
	(
			String	uriApplication
	) throws	Exception;
	
	
	/**
	 * Permet de demander la modification de la fréquence des coeurs attribués
	 * à la machine virtuelle d'une application sur une machine physique.
	 * @param uriApplication identifiant de l'application faisant la demande
	 * @return La frequence totale dédiée à l'application
	 */
	public	float	appliquerNouvelleFrequence
	(
			String	uriApplication
	) throws	Exception;
	
	
	/**
	 * Permet de réserver une fréquence pour un coeur en particulier
	 */
	public	boolean	reserverNouvelleFrequence
	(
			String	uriApplication,
			String	uriCoeur,
			float	nouvelleFrequence
	) throws	Exception;
}
